b03f5a096a38a81cba907ca98aaff200f576a52b,src/main/java/au/edu/wehi/idsv/sam/SAMRecordUtil.java,SAMRecordUtil,bestMateFor,#SAMRecord#List#,884

Before Change


				.filter(m -> r.getAlignmentStart() == m.getMateAlignmentStart())
				.filter(m -> r.getReadNegativeStrandFlag() == m.getMateNegativeStrandFlag()).findFirst();
		// see if we already point to one of the mates
		if (!best.isPresent()) {
			best = mates.stream().filter(m -> m.getReadUnmappedFlag() == r.getMateUnmappedFlag())
					.filter(m -> m.getReferenceIndex() == r.getMateReferenceIndex())
					.filter(m -> m.getAlignmentStart() == r.getMateAlignmentStart())

After Change


				.filter(m -> m.getAlignmentStart() == r.getMateAlignmentStart())
				.filter(m -> m.getReadNegativeStrandFlag() == r.getMateNegativeStrandFlag()).findFirst();
		// see if one of the mates already points to us
		if (best.isPresent()) return best.get();
		best = mates.stream().filter(m -> r.getReadUnmappedFlag() == m.getMateUnmappedFlag())
				.filter(m -> r.getReferenceIndex() == m.getMateReferenceIndex())
				.filter(m -> r.getAlignmentStart() == m.getMateAlignmentStart())
				.filter(m -> r.getReadNegativeStrandFlag() == m.getMateNegativeStrandFlag()).findFirst();
		if (best.isPresent()) return best.get();
		// match primary with primary and secondary with secondary
		best = mates.stream().filter(m -> m.getSupplementaryAlignmentFlag() == r.getSupplementaryAlignmentFlag())
				.filter(m -> m.getNotPrimaryAlignmentFlag() == r.getNotPrimaryAlignmentFlag())
				// prefer mapped reads
				.sorted(Comparator.comparing(SAMRecord::getReadUnmappedFlag)).findFirst();
		if (best.isPresent()) return best.get();
		// just get anything that's not a supplementary alignment
		best = mates.stream().filter(m -> m.getSupplementaryAlignmentFlag() == r.getSupplementaryAlignmentFlag())
				.findFirst();